(function()
  {
    UserApp = function() {
      this.selectAll= 0;
    };
    
    UserApp.prototype.showUserProfile = function(codiceUtenteLoggato){
      var thisInstance = this;
      
      if($('.us-profile'))
      {
        $('.us-profile').empty();
        $('.us-profile').dialog("close");
      }
      
      var jqUserProfile = $('<div class="us-profile"></div>');
      jqUserProfile.dialog({
        width: 800,
        height: 600,
        position: "top",
        closeOnEscape: true,
        title: "Profilo"
      });
      jqUserProfile.dialog("open");
      
      jqUserProfile.empty();
      var jqTabs = $('<div id="tabs"></div>').appendTo(jqUserProfile);
      var jqUlTabs = $('<ul></ul>').appendTo(jqTabs);
      $('<li><a href="#tabs-1">Anagrafica</a></li>').appendTo(jqUlTabs);
      $('<li><a href="#tabs-2">Proprietà</a></li>').appendTo(jqUlTabs);
     
      var jqUserInfoSection = $('<div id="tabs-1"></div>').appendTo(jqTabs);
      var jqUserInfoForm = thisInstance.composeRegistrationForm();
      jqUserInfoSection.append(jqUserInfoForm);
            
      var parameters = {};
      parameters.operation = "getUtente";
      parameters.codice = codiceUtenteLoggato;
      $.ajax({
        type: "POST",
        url: "listeners/UtenteListener.php",
        dataType : "json",
        data: parameters,
        cache: false,
        success: function(utente)
        {
          if(utente.codice == "-100")
            jqUserInfoSection.append("Sessione scaduta. Riloggarsi");
          else
          {
            $('.us-rowAttivo').show();
            if(utente.attivo == 1)
              $('.us-attivoCheck').attr('checked', 'true');
            
            $('.us-emailText', jqUserInfoForm).val(utente.email).attr('disabled', 'disabled');
            $('.us-passwordText', jqUserInfoForm).hide();
            $('.us-passwordLabel', jqUserInfoForm).hide();
            $('.us-passwordLabel', jqUserInfoForm).hide();
            $('.us-discipline', jqUserInfoForm).hide();
            $('.us-confirmPasswordText', jqUserInfoForm).hide();
            $('.us-nazioneSelect', jqUserInfoForm).val(utente.nazione);
            $('.us-regioneSelect', jqUserInfoForm).val(utente.regione);
            
            $('.us-provinciaSelect', jqUserInfoForm).empty();
            var parameters = {};
            parameters.regione = utente.regione;
            parameters.operation = "getProvincie";
            $.ajax({
              type: "POST",
              url: "listeners/UtenteListener.php",
              dataType : "json",
              data: parameters,
              cache: false,
              success: function(dataResult)
              {
                $.each(dataResult, function(i, provincia){
                  if(utente.provincia == provincia.codice)
                    $('<option value="'+provincia.codice+'" selected>'+provincia.descrizione+'</option>').appendTo($('.us-provinciaSelect', jqUserInfoForm));
                  else
                    $('<option value="'+provincia.codice+'" >'+provincia.descrizione+'</option>').appendTo($('.us-provinciaSelect', jqUserInfoForm));
                });
              },
              failure: function()
              {
                alert("Fault in getProvincie");
              }
            });
            
            $('.us-comuneSelect', jqUserInfoForm).empty();
            
            var parameters = {};
            parameters.provincia = utente.provincia;
            parameters.regione = utente.regione;
            parameters.operation = "getComuni";
            $.ajax({
              type: "POST",
              url: "listeners/UtenteListener.php",
              dataType : "json",
              data: parameters,
              cache: false,
              success: function(dataResult)
              {
                $.each(dataResult, function(i, comune){
                  if(utente.comune == comune.codice)
                    $('<option value="'+comune.codice+'" selected>'+comune.descrizione+'</option>').appendTo($('.us-comuneSelect', jqUserInfoForm));
                  else
                    $('<option value="'+comune.codice+'">'+comune.descrizione+'</option>').appendTo($('.us-comuneSelect', jqUserInfoForm));
                });
              },
              failure: function()
              {
                alert("Fault in getComuni");
              }
            });
            
            
            $('.us-mobileText', jqUserInfoForm).val(utente.mobile);
            $('.us-nomeText', jqUserInfoForm).val(utente.nome);
            $('.us-cognomeText', jqUserInfoForm).val(utente.cognome);
            $('.us-indirizzoText', jqUserInfoForm).val(utente.indirizzo);
            $('.us-capText', jqUserInfoForm).val(utente.cap);
          }
        },
        failure: function()
        {
          alert("Fault in getUtente");
        }
      });
            
      var jqUserPropertySection = $('<div id="tabs-2"></div>').appendTo(jqTabs);
      jqUserPropertySection.append(thisInstance.composeDisciplineSection(codiceUtenteLoggato));
      $( "#tabs" ).tabs();
      $('.us-confirmBtn', jqUserProfile).hide();
      $('.us-trUpdateBtn', jqUserProfile).show();
      
      $('.us-notifActiveUserBtn', '.us-trUpdateBtn').click(function(){
        var parameters = {};
          parameters.codice = codiceUtenteLoggato;
         
          parameters.operation = "notifyActiveUser";
          
          $.ajax({
            type: "POST",
            url: "listeners/UtenteListener.php",
            dataType : "json",
            data: parameters,
            cache: false,
            success: function(result)
            {
              if(result=="OK")
                alert("Mail di attivazione correttamente inviata.");
              else
                alert("Errore duraten l'invio della mail di attivazione.");
              
            },
            failure: function()
            {
              alert("Fault in getComuni");
            }
          });
      });
      
      $('.us-updateBtn', '.us-trUpdateBtn').click(function(){
        var avoidCheckPassword = true;
        if(thisInstance.checkRegistrationForm(avoidCheckPassword) == 0)
        {
          var parameters = {};
          parameters.codice = codiceUtenteLoggato;
          parameters.attivo = 0;
          if ($('.us-attivoCheck', jqUserInfoForm).attr('checked'))
            parameters.attivo = 1;
          
          parameters.nome = $('.us-nomeText', jqUserInfoForm).val();
          parameters.cognome = $('.us-cognomeText', jqUserInfoForm).val();
          parameters.nazione = $('.us-nazioneSelect', jqUserInfoForm).val();
          parameters.regione = $('.us-regioneSelect', jqUserInfoForm).val();
          parameters.provincia = $('.us-provinciaSelect', jqUserInfoForm).val();
          parameters.comune = $('.us-comuneSelect', jqUserInfoForm).val();
          parameters.mobile = $('.us-mobileText', jqUserInfoForm).val();
          parameters.indirizzo = $('.us-indirizzoText', jqUserInfoForm).val();
          parameters.cap = $('.us-capText', jqUserInfoForm).val();
          parameters.operation = "updateUtente";
          
          $.ajax({
            type: "POST",
            url: "listeners/UtenteListener.php",
            dataType : "json",
            data: parameters,
            cache: false,
            success: function(utente)
            {
              if(utente.codice == -1)
                $('.us-console', jqUserInfoForm).html("Si è verificato un errore durante l'operazione di modifica. Contattare l'amministratore.").show();
              else
                $('.us-console', jqUserInfoForm).html("Aggiornamento eseguito con successo").show();
              
              
            },
            failure: function()
            {
              alert("Fault in getComuni");
            }
          });
            
        }
      });
          
      
    }
    
    UserApp.prototype.composeDisciplineSection = function(codiceUtenteLoggato){
      var jqDisciplineSection = $('<div class="us-disciplineSection"></div>');
      $('<span class="us-console"></span>').hide().appendTo(jqDisciplineSection);
      var jqFieldsetDiscipline = $('<fieldset class="us-discipline"></fieldset>').appendTo(jqDisciplineSection);
      var jqModificaBtn = $('<input type="button" class="us-btnUpdate" value="Modifica" />').appendTo(jqDisciplineSection);
      
      var arrayClassDiscipline = new Array();
      
      jqModificaBtn.click(function(){
        var valoreAttuale;
        $.each(arrayClassDiscipline, function(i, classeDisciplina)
        {
          if($('.'+classeDisciplina.classe, jqFieldsetDiscipline).attr('checked'))
            valoreAttuale=1;
          else
            valoreAttuale =0;
          
          var parameters = {};
          parameters.operation = "updateDisciplinaUtente";
          parameters.utente = codiceUtenteLoggato;
          parameters.disciplina = classeDisciplina.id;
          parameters.value = valoreAttuale;
          $.ajax({
            type: "POST",
            url: "listeners/UtenteListener.php",
            dataType : "json",
            data: parameters,
            cache: false,
            success: function(result)
            {
              if(result == 0)
                $('.us-console', jqDisciplineSection).html("Aggiornamento eseguito con successo").show();
              else
                $('.us-console', jqDisciplineSection).html("Si è verificato un problema nell'aggiormaneto delle discipline. Contattare l'amministratore.").show();
          
            },
            failure: function()
            {
              alert("Fault in updateDisciplinaUtente");
            }
          });
        });
      });
      
      
      var parameters = {};
      parameters.operation = "getUtenteDiscipline";
      parameters.codice = codiceUtenteLoggato;
      $.ajax({
        type: "POST",
        url: "listeners/UtenteListener.php",
        dataType : "json",
        data: parameters,
        cache: false,
        success: function(listaDisciplineUtente)
        {
          $.each(listaDisciplineUtente, function(i, disc){
            var objDisc = {};
            objDisc.id = disc.id;
            objDisc.classe="us-disc_"+disc.id;
            objDisc.value = disc.value;
            arrayClassDiscipline.push(objDisc);
            
            if(disc.value == 1)
              $('<dd><input type="checkbox" checked class="us-disc_'+disc.id+'" />'+disc.desc+'</dd>').appendTo(jqFieldsetDiscipline);
            else
              $('<dd><input type="checkbox" class="us-disc_'+disc.id+'" />'+disc.desc+'</dd>').appendTo(jqFieldsetDiscipline);
                
          });
          
        },
        failure: function()
        {
          alert("Fault in getUtenteDiscipline");
        }
      });
      
      return jqDisciplineSection;
    }
    
    UserApp.prototype.designRegistrationForm = function(){
      var jqContent = $('#content');
      this.composeRegistrationForm().appendTo(jqContent);
    }
    
    UserApp.prototype.composeRegistrationForm = function(){
      var thisInstance = this;
      this.nazioneSelezionata = 'IT';
      
      var jqRegistrationSection = $('<div class="us-registrationSection"></div>');
      
      //console
      $('<span class="us-console"></span>').hide().appendTo(jqRegistrationSection);
      
      var jqRegistrationTable = $('<table></table>').appendTo(jqRegistrationSection);
      
            
      //attivo
      var jqTrAttivo = $('<tr class="us-rowAttivo"></tr>').appendTo(jqRegistrationTable).hide();
      var jqAttivoLabel = $('<td><label class="us-attivoLabel">Attivo</label></td>');
      var jqAttivoCheck = $('<td><input type="checkbox" class="us-attivoCheck" /></td>');
      
      jqAttivoLabel.appendTo(jqTrAttivo);
      jqAttivoCheck.appendTo(jqTrAttivo);
      //email
      var jqTrEmail = $('<tr></tr>').appendTo(jqRegistrationTable);
      var jqEmailLabel = $('<td><label class="us-emailLabel">Email</label></td>');
      var jqEmailText = $('<td><input type="text" class="us-emailText" /></td>');
      var jqEmailError = $('<td><div class="us-emailErr"></div></td>');
      
      jqEmailLabel.appendTo(jqTrEmail);
      jqEmailText.appendTo(jqTrEmail);
      jqEmailError.appendTo(jqTrEmail);
      
      //password
      var jqTrPassword = $('<tr></tr>').appendTo(jqRegistrationTable);
      var jqPasswordLabel = $('<td><label class="us-passwordLabel">Password</label></td>');
      var jqPasswordText = $('<td><input type="password" class="us-passwordText" /></td>');
      var jqPasswordError = $('<td><div class="us-passwordErr"></div></td>');
      
      jqPasswordLabel.appendTo(jqTrPassword);
      jqPasswordText.appendTo(jqTrPassword);
      jqPasswordError.appendTo(jqTrPassword);
      
      //conferma password
      var jqTrConfermaPassword = $('<tr></tr>').appendTo(jqRegistrationTable);
      var jqConfermaPasswordLabel = $('<td><label class="us-passwordLabel">Conferma password</label></td>');
      var jqConfermaPasswordText = $('<td><input type="password" class="us-confirmPasswordText" /></td>');
      var jqConfermaPasswordError = $('<td><div class="us-confirmPasswordErr"></div></td>');

      jqConfermaPasswordLabel.appendTo(jqTrConfermaPassword);
      jqConfermaPasswordText.appendTo(jqTrConfermaPassword);
      jqConfermaPasswordError.appendTo(jqTrConfermaPassword);

      //nome
      var jqTrNome = $('<tr></tr>').appendTo(jqRegistrationTable);
      var jqNomeLabel = $('<td><label class="us-nomeLabel">Nome</label></td>');
      var jqNomeText = $('<td><input type="text" class="us-nomeText" /></td>');
      var jqNomeError = $('<td><div class="us-nomeErr"></div></td>');
      
      jqNomeLabel.appendTo(jqTrNome);
      jqNomeText.appendTo(jqTrNome);
      jqNomeError.appendTo(jqTrNome);
      
      //cognome
      var jqTrCognome = $('<tr></tr>').appendTo(jqRegistrationTable);
      var jqCognomeLabel = $('<td><label class="us-cognomeLabel">Cognome</label></td>');
      var jqCognomeText = $('<td><input type="text" class="us-cognomeText" /></td>');
      var jqCognomeError = $('<td><div class="us-cognomeErr"></div></td>');
      
      jqCognomeLabel.appendTo(jqTrCognome);
      jqCognomeText.appendTo(jqTrCognome);
      jqCognomeError.appendTo(jqTrCognome);

      var jqTrNazione = $('<tr></tr>').appendTo(jqRegistrationTable);
      var jqNazioneLabel = $('<td><label class="us-nazioneLabel">Nazione</label></td>');
      var jqNazioneSelect = $('<td><select class="us-nazioneSelect"></select></td>');

      var parameters = {};
      parameters.operation = "getNazioni";
      $.ajax({
        type: "POST",
        url: "listeners/UtenteListener.php",
        dataType : "json",
        data: parameters,
        cache: false,
        success: function(dataResult)
        {
          $.each(dataResult, function(i, nazione){
            if(nazione.codice == 'IT')
              $('<option value="'+nazione.codice+'" selected>'+nazione.descrizione+'</option>').appendTo($('.us-nazioneSelect', jqNazioneSelect));
            else
              $('<option value="'+nazione.codice+'">'+nazione.descrizione+'</option>').appendTo($('.us-nazioneSelect', jqNazioneSelect));
          })
        },
        failure: function()
        {
          alert("Fault in getNazioni");
        }
      });

      jqNazioneLabel.appendTo(jqTrNazione);
      jqNazioneSelect.appendTo(jqTrNazione);

      var jqTrRegione = $('<tr></tr>').appendTo(jqRegistrationTable);
      var jqRegioneLabel = $('<td><label class="us-regioneLabel">Regione</label></td>');
      var jqRegioneSelect = $('<td><select class="us-regioneSelect"></select></td>');
      jqRegioneLabel.appendTo(jqTrRegione);
      jqRegioneSelect.appendTo(jqTrRegione);

      var jqTrProvincia = $('<tr></tr>').appendTo(jqRegistrationTable);
      var jqProvinciaLabel = $('<td><label class="us-provinciaLabel">Provincia</label></td>');
      var jqProvinciaSelect = $('<td><select class="us-provinciaSelect"></select></td>');
      jqProvinciaLabel.appendTo(jqTrProvincia);
      jqProvinciaSelect.appendTo(jqTrProvincia);

      var jqTrComune = $('<tr></tr>').appendTo(jqRegistrationTable);
      var jqComuneLabel = $('<td><label class="us-comuneLabel">Comune</label></td>');
      var jqComuneSelect = $('<td><select class="us-comuneSelect"></select></td>');
      jqComuneLabel.appendTo(jqTrComune);
      jqComuneSelect.appendTo(jqTrComune);

      thisInstance.nazioneSelezionata = 'IT';
      thisInstance.regioneSelezionata = 1;
      thisInstance.provinciaSelezionata = 1;

           
      //cell
      var jqTrMobile = $('<tr></tr>').appendTo(jqRegistrationTable);
      var jqMobileLabel = $('<td><label class="us-mobileLabel">Cellulare</label></td>');
      var jqMobileText = $('<td><input type="text" class="us-mobileText" /></td>');
      var jqMobileError = $('<td><div class="us-mobileErr"></div></td>');

      jqMobileLabel.appendTo(jqTrMobile);
      jqMobileText.appendTo(jqTrMobile);
      jqMobileError.appendTo(jqTrMobile);

      //indirizzo
      var jqTrIndirizzo = $('<tr></tr>').appendTo(jqRegistrationTable);
      var jqIndirizzoLabel = $('<td><label class="us-indirizzoLabel">Indirizzo</label></td>');
      var jqIndirizzoText = $('<td><input type="text" class="us-indirizzoText" /></td>');
      var jqIndirizzoError = $('<td><div class="us-indirizzoErr"></div></td>');

      jqIndirizzoLabel.appendTo(jqTrIndirizzo);
      jqIndirizzoText.appendTo(jqTrIndirizzo);
      jqIndirizzoError.appendTo(jqTrIndirizzo);

      //cap
      var jqTrCap = $('<tr></tr>').appendTo(jqRegistrationTable);
      var jqCapLabel = $('<td><label class="us-capLabel">Cap</label></td>');
      var jqCapText = $('<td><input type="text" class="us-capText" /></td>');
      var jqCapError = $('<td><div class="us-capErr"></div></td>');

      jqCapLabel.appendTo(jqTrCap);
      jqCapText.appendTo(jqTrCap);
      jqCapError.appendTo(jqTrCap);

      var elencoDiscipline = new Array();
      // sport praticati
      var jqTrDiscipline = $('<tr></tr>').appendTo(jqRegistrationTable);
      var jqTdDiscipline = $('<td></td>').appendTo(jqTrDiscipline);
      var jqFieldSetDiscipline = $('<fieldset class="us-discipline"></fieldset>').appendTo(jqTdDiscipline);
      $('<legend>Sport praticati</legend>').appendTo(jqFieldSetDiscipline);
      var parameters = {};
      parameters.operation = "getDiscipline";
      $.ajax({
        type: "POST",
        url: "listeners/UtenteListener.php",
        dataType : "json",
        data: parameters,
        cache: false,
        success: function(dataResult)
        {
          $.each(dataResult, function(i, disc){
            $('<dd><input type="checkbox" class="us-'+disc.disciplina+'_'+disc.id+'" />'+disc.disciplina+'</dd>').appendTo(jqFieldSetDiscipline);
            elencoDiscipline.push(disc);
          });
        },
        failure: function()
        {
          alert("Fault in getDiscipline");
        }
      });

      var jqTrConfirm = $('<tr></tr>').appendTo(jqRegistrationTable);
      var jqConfirm = $('<td><input type="button" value="Conferma" class="us-confirmBtn" /></td>');
      jqConfirm.appendTo(jqTrConfirm);
      
      var jqTrUpdate = $('<tr class="us-trUpdateBtn"></tr>').appendTo(jqRegistrationTable).hide();
      var jqUpdate = $('<td><input type="button" value="Conferma" class="us-updateBtn" /></td>');
      var jqSendValidationMail = $('<td><input type="button" value="Notifica attivazione" class="us-notifActiveUserBtn" /></td>');
      jqUpdate.appendTo(jqTrUpdate);
      jqSendValidationMail.appendTo(jqTrUpdate);

            
      $('.us-confirmBtn', jqConfirm).click(function(){
               
        if(thisInstance.checkRegistrationForm()==0)
        {
          var parameters = {};
          parameters.operation = "getCodiceByEmail";
          parameters.email = $('.us-emailText').val();
          $.ajax({
            type: "POST",
            url: "listeners/UtenteListener.php",
            dataType : "json",
            data: parameters,
            cache: false,
            success: function(dataResult)
            {
              if(dataResult != "0")
              {
                $('.us-emailErr').html('<div class="formErr">Email già presente nel sistema.</div>');
                return -1;
              }

              var parameters = {};
              parameters.operation = "insertUtente";

              parameters.email = $('.us-emailText').val();
              parameters.password = $('.us-passwordText').val();
              parameters.nome = $('.us-nomeText').val();
              parameters.cognome = $('.us-cognomeText').val();
              parameters.mobile = $('.us-mobileText').val();
              parameters.indirizzo = $('.us-indirizzoText').val();
              parameters.nazione = $('.us-nazioneSelect', jqNazioneSelect).val();
              if(parameters.nazione == 'IT')
              {
                parameters.regione = $('.us-regioneSelect', jqRegioneSelect).val();
                parameters.provincia = $('.us-provinciaSelect', jqProvinciaSelect).val();
                parameters.comune = $('.us-comuneSelect', jqComuneSelect).val();
              }
              else
              {
                parameters.regione = 0;
                parameters.provincia = 0;
                parameters.comune = 0;
              }
              parameters.cap = $('.us-capText').val();
              parameters.discipline='';
              $.each(elencoDiscipline, function(i, disci){
                if($('.us-'+disci.disciplina+'_'+disci.id).attr('checked'))
                  parameters.discipline += disci.id + "_";

              });

              $.ajax({
                type: "POST",
                url: "listeners/UtenteListener.php",
                dataType : "json",
                data: parameters,
                cache: false,
                success: function(dataResult)
                {
                  if(dataResult == 1)
                  {
                     $('#content').html(parameters.nome + ' ' + parameters.cognome+'<br/><br/>sei stato correttamente registrato nel sistema.');
                     window.location.href="http://www.wind24.it/torresangiovanni/1/index.php";
                  }
                  else
                    $('#content').html('Si è verificato un errore durante la registrazione nel sistema. Contattare l\'amministratore');
                },
                failure: function()
                {
                  alert("Fault in insertUtente");
                }
              });
            },
            failure: function()
            {
              alert("Fault in getDiscipline");
            }
          });
                    
        }
      });
      //inizializzazione nazione

      var parameters = {};
      parameters.operation = "getRegioni";
      $.ajax({
        type: "POST",
        url: "listeners/UtenteListener.php",
        dataType : "json",
        data: parameters,
        cache: false,
        success: function(dataResult)
        {
          $.each(dataResult, function(i, regione){
            $('<option value="'+regione.codice+'">'+regione.descrizione+'</option>').appendTo($('.us-regioneSelect', jqRegioneSelect));
          });
        },
        failure: function()
        {
          alert("Fault in getRegioni");
        }
      });


      //inizializzazione provincie
      var parameters = {};
      parameters.regione = thisInstance.regioneSelezionata;
      parameters.operation = "getProvincie";
      $.ajax({
        type: "POST",
        url: "listeners/UtenteListener.php",
        dataType : "json",
        data: parameters,
        cache: false,
        success: function(dataResult)
        {
          $.each(dataResult, function(i, provincia){
            $('<option value="'+provincia.codice+'">'+provincia.descrizione+'</option>').appendTo($('.us-provinciaSelect', jqProvinciaSelect));
          });
        },
        failure: function()
        {
          alert("Fault in getProvincie");
        }
      });

      //inizializzazione comuni
      var parameters = {};
      parameters.provincia = thisInstance.provinciaSelezionata;
      parameters.regione = thisInstance.regioneSelezionata;
      parameters.operation = "getComuni";
      $.ajax({
        type: "POST",
        url: "listeners/UtenteListener.php",
        dataType : "json",
        data: parameters,
        cache: false,
        success: function(dataResult)
        {
          $.each(dataResult, function(i, comune){
            $('<option value="'+comune.codice+'">'+comune.descrizione+'</option>').appendTo($('.us-comuneSelect', jqComuneSelect));
          });
        },
        failure: function()
        {
          alert("Fault in getComuni");
        }
      });

      //provincia

      $('.us-nazioneSelect', jqNazioneSelect).change(function(){
        thisInstance.nazioneSelezionata = $('.us-nazioneSelect', jqNazioneSelect).val();
        if(thisInstance.nazioneSelezionata == 'IT')
        {
          jqTrRegione.show();
          jqTrProvincia.show();
          jqTrComune.show();
          var parameters = {};
          parameters.operation = "getRegioni";
          $.ajax({
            type: "POST",
            url: "listeners/UtenteListener.php",
            dataType : "json",
            data: parameters,
            cache: false,
            success: function(dataResult)
            {
              $.each(dataResult, function(i, regione){
                $('<option value="'+regione.codice+'">'+regione.descrizione+'</option>').appendTo($('.us-regioneSelect', jqRegioneSelect));
              });
            },
            failure: function()
            {
              alert("Fault in getRegioni");
            }
          });
        }
        else
        {
          jqTrRegione.hide();
          jqTrProvincia.hide();
          jqTrComune.hide();
        }
      });

      $('.us-regioneSelect', jqRegioneSelect).change(function(){
        var parameters = {};
        thisInstance.regioneSelezionata = $('.us-regioneSelect', jqRegioneSelect).val();
        parameters.regione = thisInstance.regioneSelezionata;
        parameters.operation = "getProvincie";
        $.ajax({
          type: "POST",
          url: "listeners/UtenteListener.php",
          dataType : "json",
          data: parameters,
          cache: false,
          success: function(dataResult)
          {
            $('.us-provinciaSelect', jqProvinciaSelect).empty();
            $.each(dataResult, function(i, provincia){
              $('<option value="'+provincia.codice+'">'+provincia.descrizione+'</option>').appendTo($('.us-provinciaSelect', jqProvinciaSelect));
            });

            var param = {};
            param.provincia = dataResult[0].codice;
            param.regione = thisInstance.regioneSelezionata;
            param.operation = "getComuni";
            $.ajax({
              type: "POST",
              url: "listeners/UtenteListener.php",
              dataType : "json",
              data: param,
              cache: false,
              success: function(dataResult)
              {
                $('.us-comuneSelect', jqComuneSelect).empty();
                $.each(dataResult, function(i, comune){
                  $('<option value="'+comune.codice+'">'+comune.descrizione+'</option>').appendTo($('.us-comuneSelect', jqComuneSelect));
                });
              },
              failure: function()
              {
                alert("Fault in getComuni");
              }
            });
          },
          failure: function()
          {
            alert("Fault in getProvincie");
          }
        });

      });

      $('.us-provinciaSelect', jqProvinciaSelect).change(function(){
        thisInstance.provinciaSelezionata = $('.us-provinciaSelect', jqProvinciaSelect).val();
        var parameters = {};
        parameters.provincia = thisInstance.provinciaSelezionata;
        parameters.regione = thisInstance.regioneSelezionata;
        parameters.operation = "getComuni";
        $.ajax({
          type: "POST",
          url: "listeners/UtenteListener.php",
          dataType : "json",
          data: parameters,
          cache: false,
          success: function(dataResult)
          {
            $('.us-comuneSelect', jqComuneSelect).empty();
            $.each(dataResult, function(i, comune){
              $('<option value="'+comune.codice+'">'+comune.descrizione+'</option>').appendTo($('.us-comuneSelect', jqComuneSelect));
            });
          },
          failure: function()
          {
            alert("Fault in getComuni.");
          }
        });
      });
      
      return jqRegistrationSection;
    }
        
    UserApp.prototype.designUserSearchForm = function(){
      var thisInstance = this;
      var jqContent = $('.content');
      
      var jqSearchFormSection = $('<div class="us-searchForm"></div>').appendTo(jqContent);
      
      
      var parameters = {};
      parameters.operation = "getDiscipline";
      $.ajax({
        type: "POST",
        url: "listeners/UtenteListener.php",
        dataType : "json",
        data: parameters,
        cache: false,
        success: function(dataResult)
        {
          var fieldSetSearch = $('<fieldset></fieldset>').appendTo(jqSearchFormSection);
          var table = $('<table></table>').appendTo(fieldSetSearch);
          var trEmail = $('<tr></tr>').appendTo(table);
          $('<td>Email: </td>').appendTo(trEmail);
          var tdEmail = $('<td><input type="text" class="us-search-email" /></td>').appendTo(trEmail);
          var trNome = $('<tr></tr>').appendTo(table);
          $('<td>Nome: </td>').appendTo(trNome);
          var tdNome = $('<td><input type="text" class="us-search-nome" /></td>').appendTo(trNome);
          var trCognome = $('<tr></tr>').appendTo(table);
          var tdCognome = $('<td>Cognome: </td>').appendTo(trCognome);
          $('<td><input type="text" class="us-search-cognome" /></td>').appendTo(trCognome);
          var trDiscipline = $('<tr></tr>').appendTo(table);
          $('<td>Discipline: </td>').appendTo(trDiscipline);
          
          var trlistaDiscipline = $('<tr></tr>').appendTo(table);
          var tdListaDiscipline = $('<td></td>').appendTo(trlistaDiscipline);
          var tableLista = $('<table></table>').appendTo(tdListaDiscipline);
          var colsCorrenti = 0;
          var trSports;
          var arrayDiscipline = new Array();
          $.each(dataResult, function(i, disc){
            if (colsCorrenti == 0)
              trSports = $('<tr></tr>').appendTo(tableLista);
            
            colsCorrenti++;
            if(colsCorrenti == 2)
              colsCorrenti = 0;
            
            arrayDiscipline.push(disc.id);
            $('<td><input type="checkbox" class="us-disc_'+disc.id+'" />'+disc.disciplina+'</td>').appendTo(trSports);
          });
          
          var trBtn = $('<tr></tr>').appendTo(fieldSetSearch);
          var tdBtn = $('<td><input type="button" class="us-searchBtn" value="Cerca" /></td>').appendTo(trBtn);

          var jqResult = $('<div class="us-userSearchResult"></div>').appendTo(jqSearchFormSection);
                   

          $('.us-searchBtn', tdBtn).click(function(){
            var parameters = {};
            
            parameters.email = $('.us-search-email', tdEmail).val();
            parameters.nome = $('.us-search-nome', tdNome).val();
            parameters.cognome = $('.us-search-cognome', tdCognome).val();
            parameters.discipline="";
            var i = 0;
            for(i = 0;i<arrayDiscipline.length;i++)
              if($('.us-disc_'+arrayDiscipline[i]).attr('checked'))
                parameters.discipline+=arrayDiscipline[i]+",";
            
            parameters.operation = "searchUsers";
            
            // console.log("parameters.discipline " + parameters.discipline);
            
            $.ajax({
              type: "POST",
              url: "listeners/UtenteListener.php",
              dataType : "json",
              data: parameters,
              cache: false,
              success: function(listaUtenti)
              {
                jqResult.empty();
                var tableResult = $('<table border="1"></table>').appendTo(jqResult);
                var trHeader = $('<tr></tr>').appendTo(tableResult);
                $('<th>Attivo</th>').appendTo(trHeader);
                $('<th>Data Registrazione</th>').appendTo(trHeader);
                $('<th>Email</th>').appendTo(trHeader);
                $('<th>Nome</th>').appendTo(trHeader);
                $('<th>Cognome</th>').appendTo(trHeader);
                $('<th>Dettaglio</th>').appendTo(trHeader);
                var thSelect = $('<th><input type="button" class="us-selectAll" value="Seleziona tutti" /</th>').appendTo(trHeader);

                $('.us-selectAll', thSelect).click(function(){
                  if(thisInstance.selectAll == 1)
                  {
                    thisInstance.selectAll = 0;
                    var e = new jQuery.Event("deSelectAllUser");
                  }
                  else
                  {
                    thisInstance.selectAll = 1;
                    var e = new jQuery.Event("selectAllUser");
                  }
                                    
                  $(thisInstance).trigger(e);
                });

                var i;
                
                for(i=0;i<listaUtenti.length;i++)
                  (function(utente)
                  {
                    
                    var tr = $('<tr></tr>').appendTo(tableResult);
                    if(utente.attivo == 1)
                      $('<td><input type="checkbox" checked disabled />Attivo</td>').appendTo(tr);
                    else
                      $('<td><input type="checkbox" disabled />Attivo</td>').appendTo(tr);
                    $('<td>'+utente.creationDate+'</td>').appendTo(tr);
                    $('<td>'+utente.email+'</td>').appendTo(tr);
                    $('<td>'+utente.nome+'</td>').appendTo(tr);
                    $('<td>'+utente.cognome+'</td>').appendTo(tr);
                    var tdDettaglio = $('<td><input type="button" class="us-btnShowProfile" value="Dettaglio Utente" /></td>').appendTo(tr);
                    $('.us-btnShowProfile', tdDettaglio).click(function(){
                      thisInstance.showUserProfile(utente.codice);
                    });
                    var tdSeleziona = $('<td align="center"><input type="checkbox" class="us-btnSelectUser_'+utente.codice+'" /></td>').appendTo(tr);
                    $(thisInstance).bind('selectAllUser', function(){
                      $('.us-btnSelectUser_'+utente.codice, tdSeleziona).attr('checked', 'true');
                    });
                    $(thisInstance).bind('deSelectAllUser', function(){
                      $('.us-btnSelectUser_'+utente.codice, tdSeleziona).removeAttr('checked');
                    });
                  })(listaUtenti[i]);
                  
                var jqAlerts = $('<div class="us-alertsSection"></div>').appendTo(jqResult);                  
                var jqEmailAlerts = $('<div class="us-emailAlert"></div>').appendTo(jqAlerts);
                var jqSmsAlerts = $('<div class="us-smsAlert"></div>').appendTo(jqAlerts);
                  
                //alert email
                var jqEmailTable = $('<table></table>').appendTo(jqEmailAlerts);                  
                var jqTrEmailObject = $('<tr></tr>').appendTo(jqEmailTable);
                $('<td><label>Oggetto* :</label></td>').appendTo(jqTrEmailObject);
                var jqEmailObject = $('<td><input type="text" class="us-emailObject" /></td>').appendTo(jqTrEmailObject);                  
                var jqTrEmailText = $('<tr></tr>').appendTo(jqEmailTable);
                $('<td><label>Testo* :</label></td>').appendTo(jqTrEmailText);
                var jqEmailText = $('<td><textarea class="us-emailText" rows="20" cols="50"></textarea>').appendTo(jqTrEmailText);
                var jqTrBtnEmailInvia = $('<tr></tr>').appendTo(jqEmailTable);
                var jqBtnEmailInvia = $('<td><input type="button" class="us-btnEmailInvia" value="Invia"/></td>').appendTo(jqTrBtnEmailInvia);
                  
                //alert sms
                var jqSmsTable = $('<table></table>').appendTo(jqSmsAlerts);                  
                var jqTrSmsText = $('<tr></tr>').appendTo(jqSmsTable);
                $('<td><label>Testo* :</label></td>').appendTo(jqTrSmsText);
                var jqSmsText = $('<td><textarea class="us-smsText" rows="20" cols="50"></textarea>').appendTo(jqTrSmsText);
                var jqTrBtnSmsInvia = $('<tr></tr>').appendTo(jqSmsTable);
                var jqBtnSmsInvia = $('<td><input type="button" class="us-smsBtnInvia" value="Invia"/></td>').appendTo(jqTrBtnSmsInvia);
                  
                $('.us-smsBtnInvia', jqBtnSmsInvia).click(function(){
                  var testo = $('.us-smsText', jqSmsText).val();                  
                  
                  if(testo.length == 0)
                  {
                    alert("Il campo testo è obbligatorio.");
                    return;
                  }
                          
                  var listaMobiles = "";
                  var emailParam = {};
                  emailParam.testo = testo;
                  emailParam.listaMobiles = function(){
                    for(i=0;i<listaUtenti.length;i++)
                    {
                      var utente = listaUtenti[i];
                      if($('.us-btnSelectUser_'+utente.codice, tableResult).attr('checked'))
                        listaMobiles += "" + utente.mobile + ",";
                    }
                    return listaMobiles;
                  };
                  emailParam.operation = "sendSmsMessage";
                
                  $.ajax({
                    type: "POST",
                    url: "listeners/UtenteListener.php",
                    dataType : "json",
                    data: emailParam,
                    cache: false,
                    success: function(dataResult)
                    {
                      if(dataResult == "OK")
                        alert("Sms correttamente inviato");
                      else
                        alert("Si è verificato un errore nella procedura di invio. Riprovare o contattare l'amministratore.");
                    },
                    failure: function()
                    {
                      alert("Si è verificato un errore nella procedura di invio. Riprovare o contattare l'amministratore.");
                    }
                  });
                });
                
                $('.us-btnEmailInvia', jqBtnEmailInvia).click(function(){
                  var oggetto = $('.us-emailObject', jqEmailObject).val();
                  var testo = $('.us-emailText', jqEmailText).val();
                  
                  if(oggetto.length == 0)
                  {
                    alert("Il campo oggetto è obbligatorio.");
                    return;
                  }
                  if(testo.length == 0)
                  {
                    alert("Il campo testo è obbligatorio.");
                    return;
                  }
                  
                  var listaEmails  = "";
                  
                  //alert(listaEmails);
                  
                  var emailParam = {};
                  emailParam.oggetto = oggetto;
                  emailParam.testo = testo;
                  emailParam.listaEmails = function(){
                    for(i=0;i<listaUtenti.length;i++)
                    {
                      var utente = listaUtenti[i];
                      if($('.us-btnSelectUser_'+utente.codice, tableResult).attr('checked'))
                        listaEmails += "" + utente.email + ",";
                    }
                    return listaEmails;
                  };
                  emailParam.operation = "sendEmailMessage";
                
                  $.ajax({
                    type: "POST",
                    url: "listeners/UtenteListener.php",
                    dataType : "json",
                    data: emailParam,
                    cache: false,
                    success: function(dataResult)
                    {
                      if(dataResult == "OK")
                        alert("Email correttamente inviata");
                      else
                        alert("Si è verificato un errore nella procedura di invio. Riprovare o contattare l'amministratore.");
                    },
                    failure: function()
                    {
                      alert("Si è verificato un errore nella procedura di invio. Riprovare o contattare l'amministratore.");
                    }
                  });
        
                });
                  
                  
              },
              failure: function()
              {
                alert("Fault in getComuni.");
              }
            });
          })
        },
        failure: function()
        {
          alert("Fault in getDiscipline");
        }
        
      });
      
    }
    
    UserApp.prototype.checkRegistrationForm = function(avoidCheckPassword){
      //console.log("avoidCheckPassword " + avoidCheckPassword);
      var email = $('.us-emailText').val();
      var password = $('.us-passwordText').val();
      var confermaPassword = $('.us-confirmPasswordText').val();
      var nome = $('.us-nomeText').val();
      var cognome = $('.us-cognomeText').val();
      var mobile = $('.us-mobileText').val();
      var indirizzo = $('.us-indirizzoText').val();
      var cap = $('.us-capText').val();


      //check Password
      if(avoidCheckPassword == undefined)
      {
        if(password != confermaPassword)
        {
          $('.us-confirmPasswordErr').html('<div class="formErr">La password deve essere uguale al conferma password.</div>');
          return -1;
        }
      }
      // check email

      if(avoidCheckPassword == undefined)
      {
        if(email.length==0)
        {
          $('.us-emailErr').html('<div class="formErr">La mail è obbligatoria.</div>');
          return -1;
        }
        else
        {
          var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
          if (!filter.test(email)) {
            $('.us-emailErr').html('<div class="formErr">Inserire una email valida.</div>');
            return -1;
          }
          else
            $('.us-emailErr').empty();
        }
      }

      // check password
      if(avoidCheckPassword == undefined)
      {
        if(password.length==0)
        {
          $('.us-passwordErr').html('<div class="formErr">La password è obbligatoria.</div>');
          return -1;
        }
        else
          $('.us-passwordErr').empty();

        if(password.length<5)
        {
          $('.us-passwordErr').html('<div class="formErr">La password deve contenere almeno 5 caratteri.</div>');
          return -1;
        }
        else
          $('.us-passwordErr').empty();
      }

      // check nome

      if(nome.length==0)
      {
        $('.us-nomeErr').html('<div class="formErr">Il nome è obbligatorio.</div>');
        return -1;
      }
      else
        $('.us-nomeErr').empty();

      if(cognome.length==0)
      {
        $('.us-cognomeErr').html('<div class="formErr">Il cognome è obbligatorio.</div>');
        return -1;
      }
      else
        $('.us-cognomeErr').empty();

      // check mobile

      if(mobile.length==0)
      {
        $('.us-mobileErr').html('<div class="formErr">Il cellulare è obbligatorio.</div>');
        return -1;
      }

      var intRegex = /^((\d+\s)$)|(\d+$)/;

      if(!intRegex.test(mobile)) {
        $('.us-mobileErr').html('<div class="formErr">Il cellulare deve contenere solo caratteri numerici.</div>');
        return -1;
      }
      else
        $('.us-mobileErr').empty();

      if(indirizzo.length==0)
      {
        $('.us-indirizzoErr').html('<div class="formErr">L\'indirizzo è obbligatorio.</div>');
        return -1;
      }
      else
        $('.us-indirizzoErr').empty();

      if(cap.length==0)
      {
        $('.us-capErr').html('<div class="formErr">Il CAP è obbligatorio.</div>');
        return -1;
      }
      else
      {
        intRegex = /^((\d+\s)$)|(\d+$)/;

        if(!intRegex.test(cap)) {
          $('.us-capErr').html('<div class="formErr">Il CAP deve contenere solo caratteri numerici.</div>');
          return -1;
        }
        else
          $('.us-capErr').empty();
      }


      return 0;
        
    }
  })();